package com.hashtab;

/**
 * HashTable用于管理多条链表
 */
public class HashTab {
    private EmpLinkedList[] empLinkedListArray;
    private int size; //表示一共有多少条链表

    public HashTab(int size){
        this.size = size;
        empLinkedListArray = new EmpLinkedList[size];
        //给数组中的每一个EmpLinkedList初始化
        for(int i = 0;i<size;i++){
            empLinkedListArray[i] = new EmpLinkedList();
        }
    }

    /**
     * 添加雇员
     */
    public void add(Emp emp){
        int n = hashFun(emp.id);
        empLinkedListArray[n].add(emp);
    }

    /**
     * 散列函数：根据员工的id，得到该员工应该添加到哪条链表
     */
    public int hashFun(int id){
        return (id-1) % size;
    }

    /**
     * 遍历所有的链表，遍历哈希表
     */
    public void showAllList(){
        for(int i= 0;i<size;i++){
            empLinkedListArray[i].showEmp(i);
        }
    }

    /**
     * 根据输入的id查找雇员
     */
    public void findEmpById(int id){
        //首先根据散列函数确定该id存储在哪条链表中
        int n = hashFun(id);
        Emp emp = empLinkedListArray[n].findEmpById(id);
        if(emp != null){
            System.out.println("在第"+(n+1)+"条链表找到id为"+id+"的雇员");
        }else {
            System.out.println("没有找到该链表");
        }
    }

    /**
     * 删除指定id的员工
     */
    public void deleteEmpById(int id){
        int n = hashFun(id);
        empLinkedListArray[n].deleteEmpById(id);
    }

}
